package com.ffggffgfv.backend.service;

import com.ffggffgfv.backend.dto.CartDisplayDTO;
import com.ffggffgfv.backend.dto.CartItemDTO;
import com.ffggffgfv.backend.entity.Cart;

import java.util.List;
import java.util.Map;

/**
 * 购物车服务接口
 */
public interface CartService {

    /**
     * 获取用户购物车列表
     *
     * @param userId 用户ID
     * @return 购物车项展示列表
     */
    List<CartDisplayDTO> getCartList(Long userId);

    /**
     * 添加商品到购物车
     *
     * @param userId      用户ID
     * @param cartItemDTO 购物车项信息
     * @return 添加后的购物车项
     */
    Cart addToCart(Long userId, CartItemDTO cartItemDTO);

    /**
     * 更新购物车项
     *
     * @param userId      用户ID
     * @param cartItemDTO 购物车项信息
     * @return 更新后的购物车项
     */
    Cart updateCart(Long userId, CartItemDTO cartItemDTO);

    /**
     * 删除购物车项
     *
     * @param userId    用户ID
     * @param productId 商品ID
     * @return 影响的行数
     */
    int deleteCartItem(Long userId, Long productId);

    /**
     * 清空购物车
     *
     * @param userId 用户ID
     * @return 影响的行数
     */
    int clearCart(Long userId);

    /**
     * 切换购物车项的选中状态
     *
     * @param userId    用户ID
     * @param productId 商品ID
     * @param selected  选中状态
     * @return 影响的行数
     */
    int toggleSelected(Long userId, Long productId, Boolean selected);

    /**
     * 全选/全不选
     *
     * @param userId   用户ID
     * @param selected 选中状态
     * @return 影响的行数
     */
    int toggleAllSelected(Long userId, Boolean selected);

    /**
     * 获取购物车商品数量
     *
     * @param userId 用户ID
     * @return 商品数量
     */
    int getCartProductCount(Long userId);

    /**
     * 获取选中的购物车项，用于结算
     *
     * @param userId 用户ID
     * @return 选中的购物车项
     */
    Map<String, Object> getSelectedCartItems(Long userId);
}
